home *** CD-ROM | disk | FTP | other *** search
- /*
- * Usage (kleiner Systemlastmonitor)
- * by Albertus Grunwald
- * (c) MAXON Computer 1993
- * siehe STC 6/93
- * mit Verbesserungen von Volker Hemsen
- * Compiler: GNU C
- * Libs: aes, vdi, std, xlb
- */
-
- #include <stddef.h>
- #include <string.h>
- #include <time.h>
- #include <aesbind.h>
- #include <vdibind.h>
- #include <mintbind.h>
- #include <xlb.h>
-
- #define SIZEW 120
- #define SIZEH 75
- #define W_KIND (NAME|CLOSE|MOVE)
-
- extern short _app;
- extern unsigned short _global[];
- # define IS_APP (_app!=0)
- # define IS_ACC (_app==0)
-
- int iVDIHandle,iWindHandle=0;
- GRECT RectDesk,RectWind;
- int piEventUsage[SIZEW],iEventCurrent;
- int piMemoryUsage[SIZEW],iMemoryCurrent;
- int piEventXY[SIZEW*2],piMemoryXY[SIZEW*2];
- int iTextHeight;
-
- long get_long(long *aptr);
- long RAMmax(void);
- long RAMfree(void);
- boolean WindOpen(void);
- void WindClose(void);
- void WindRawRedraw(GRECT*);
- void WindRedraw(GRECT*);
- void Event(void);
-
- long get_long(long *aptr)
- {
- static long lpeek(void)
- {
- return *aptr;
- }
- return Supexec(lpeek);
- }
-
- #define PHYSTOP ((long*)0x042E)
- #define RAMVALID ((long*)0x05A8)
- #define RAMTOP ((long*)0x05A4)
-
- long RAMmax(void)
- {
- register long lmax=get_long(PHYSTOP);
- if (get_long(RAMVALID)==0x1357bd13) {
- register long l=get_long(RAMTOP)-(1L<<24);
- if (l>0)
- lmax+=l;
- }
- return lmax;
- }
-
- long RAMfree(void)
- {
- register long lfree;
- if (Sversion()>=0x1900)
- lfree=(long)Mxalloc(-1L,0)+(long)Mxalloc(-1L,1);
- else
- lfree=(long)Malloc(-1L);
- return lfree;
- }
-
- boolean WindOpen(void)
- {
- if (iWindHandle<=0) {
- iWindHandle=wind_gcreate(W_KIND,&RectDesk);
- if (iWindHandle<0) {
- form_alert(1,"[3][No more|windows! ][ OK ]");
- return FALSE;
- } else {
- wind_title(iWindHandle," Usage-Mon ");
- wind_gopen(iWindHandle,&RectWind);
- wind_gget(iWindHandle,WF_WORKXYWH,&RectWind);
- }
- } else
- wind_set(iWindHandle,WF_TOP);
- return TRUE;
- }
-
- void WindClose(void)
- {
- if (iWindHandle>0) {
- wind_gget(iWindHandle,WF_CURRXYWH,&RectWind);
- wind_close(iWindHandle);
- wind_delete(iWindHandle);
- iWindHandle=0;
- }
- }
-
- void WindRawRedraw(GRECT *pRect)
- {
- char s[14];
- int xx=RectWind.g_x+1,yy=RectWind.g_y+1;
- void CurrentText(char* sName,int iColor,int iValue)
- {
- register char* ps;
- strcpy(s,sName);
- strcat(s,": ");
- ps=&s[strlen(s)];
- *ps++='0'+(iValue/10);
- *ps++='0'+(iValue%10);
- *ps++='%';
- *ps=0;
- vst_color(iVDIHandle,iColor);
- v_gtext(iVDIHandle,xx,yy,s);
- yy+=iTextHeight;
- }
- pRect->g_w+=pRect->g_x-1;
- pRect->g_h+=pRect->g_y-1;
- vs_clip(iVDIHandle,1,(int*)pRect);
- vr_recfl(iVDIHandle,(int*)pRect);
- vsl_color(iVDIHandle,V_BLUE);
- v_pline(iVDIHandle,SIZEW,piEventXY);
- vsl_color(iVDIHandle,V_RED);
- v_pline(iVDIHandle,SIZEW,piMemoryXY);
- CurrentText("EVENTS",V_BLUE,iEventCurrent);
- CurrentText("MEMORY",V_RED,iMemoryCurrent);
- vs_clipoff(iVDIHandle);
- }
-
- void WindRedraw(GRECT* pRectWind1)
- {
- if (iWindHandle>0) {
- GRECT RectWind1,RectWind2;
- {
- register int ii,jj;
- register int xx=RectWind.g_x,yy=RectWind.g_y+RectWind.g_h-1;
- for(ii=0,jj=0;ii<SIZEW;ii++) {
- piEventXY[jj]=piMemoryXY[jj]=xx+ii;
- jj++;
- piEventXY[jj]=yy-piEventUsage[ii];
- piMemoryXY[jj]=yy-piMemoryUsage[ii];
- jj++;
- }
- }
- begin_update();
- RectWind1=*pRectWind1;
- if (rc_intersect(&RectWind,&RectWind1)) {
- if (rc_intersect(&RectDesk,&RectWind1)) {
- boolean bMouseIn;
- bMouseIn=hide_mouse_inside(&RectWind1);
- wind_gget(iWindHandle,WF_FIRSTXYWH,&RectWind2);
- while ((RectWind2.g_w) && (RectWind2.g_h)) {
- if (rc_intersect(&RectWind1,&RectWind2))
- WindRawRedraw(&RectWind2);
- wind_gget(iWindHandle,WF_NEXTXYWH,&RectWind2);
- }
- if (bMouseIn)
- show_mouse();
- }
- }
- end_update();
- }
- }
-
-
- void Event(void)
- {
- boolean bQuit=FALSE;
- long lMemoryMax=RAMmax();
- long ltc=0,ltmax=0;
- time_t told=time(NULL);
- MEVENT event;
- event.flags=(MU_MESAG|MU_TIMER);
- event.time=(IS_APP)?0:50;
- while (!bQuit) {
- register short* pmsg=event.msg,iev;
- iev=evnt_event(&event);
- if (iev&MU_MESAG) {
- begin_update();
- switch(pmsg[0]) {
- case AC_OPEN:
- WindOpen();
- break;
- case AC_CLOSE:
- WindClose();
- break;
- case AP_TERM:
- bQuit=TRUE;
- break;
- default:
- if (pmsg[3]==iWindHandle) {
- switch(pmsg[0]) {
- case WM_REDRAW:
- WindRedraw((GRECT*)&pmsg[4]);
- break;
- case WM_MOVED:
- wind_gset(iWindHandle,WF_CURRXYWH,(GRECT*)&pmsg[4]);
- wind_gget(iWindHandle,WF_WORKXYWH,&RectWind);
- break;
- case WM_TOPPED:
- wind_set(iWindHandle,WF_TOP,iWindHandle);
- break;
- case WM_CLOSED:
- WindClose();
- if (IS_APP)
- bQuit=TRUE;
- break;
- } /* switch 2 */
- } /* if handle */
- } /* switch 1 */
- end_update();
- } /* if message */
- if (iev&MU_TIMER) {
- time_t tdelta,tnew=time(NULL);
- ltc++;
- if (tnew!=told) {
- register int jj;
- tdelta=(tnew-told)/2;
- if (ltmax<ltc)
- ltmax=ltc;
- for(jj=0;jj<tdelta;jj++) {
- register long lMemoryFree;
- memcpy((void*)piEventUsage,(void*)&piEventUsage[1],sizeof(int)*(SIZEW-1));
- piEventUsage[SIZEW-1]=(int)(((ltmax-ltc)*RectWind.g_h)/ltmax);
- iEventCurrent=(int)(((ltmax-ltc)*100)/ltmax);
- memcpy((void*)piMemoryUsage,(void*)&piMemoryUsage[1],sizeof(int)*(SIZEW-1));
- lMemoryFree=RAMfree();
- piMemoryUsage[SIZEW-1]=(int)(((lMemoryMax-lMemoryFree)*RectWind.g_h)/lMemoryMax);
- iMemoryCurrent=(int)(((lMemoryMax-lMemoryFree)*100L)/lMemoryMax);
- }
- ltc=0;
- told=tnew;
- WindRedraw(&RectWind);
- }
- } /* if timer */
- }
- }
-
-
- int main(void)
- {
- int iApId,d,iReturn=0;
- iApId=appl_init();
- if (iApId<0) {
- /*form_alert(1,"[3][Applikation kann nicht|angemeldet werden.][ OK ]");*/
- return(100);
- }
- {
- register short apc=_global[1];
- if ((apc<=0) || (apc>1) || (IS_ACC))
- menu_register(iApId," Usage-Monitor");
- }
- begin_update();
- iVDIHandle=v_opnvwk_screen();
- if (iVDIHandle<=0)
- iReturn=102;
- if (iReturn==0) {
- vsf_color(iVDIHandle,V_WHITE);
- vst_height(iVDIHandle,4,&d,&d,&iTextHeight,&d);
- vst_align(iVDIHandle,0,5);
- wind_gget(0,WF_WORKXYWH,&RectDesk);
- xywh_to_grect(0,0,SIZEW,SIZEH,&RectWind);
- wind_gcalc(WC_BORDER,W_KIND,&RectWind,&RectWind);
- RectWind.g_x+=RectDesk.g_x+RectDesk.g_w-RectWind.g_w-4;
- RectWind.g_y=RectDesk.g_y+3;
- if (IS_APP) {
- arrow_mouse();
- if (WindOpen()==FALSE)
- iReturn=101;
- }
- end_update();
- if (iReturn==0)
- Event();
- WindClose();
- v_clsvwk(iVDIHandle);
- } else
- end_update();
- appl_exit();
- return iReturn;
- }
-